


// 1、正确搭建一个ts环境并成功启动

// 2. 创建一个枚举类型 Color，包含三个值：Red、Green、Blue。
export enum Color {
  Red,
  Green,
  Blue,
}
// 3、创建一个名为 Shape 的抽象类，它有一个名为 name 的属性和一个抽象方法 calculateArea，用于计算图形的面积。
export abstract class Shape {
  abstract name: string
  abstract calculateArea(): number
}

// 4、创建一个名为 Rectangle 的类，它继承自 Shape 类。
export class Rectangle extends Shape {
  name: string = '矩形'
  // 5、Rectangle 类有两个属性：width 和 height，它们都是数字类型。
  width: number
  height: number
  constructor(width: number, height: number) {
    super()
    this.width = width
    this.height = height
  }
  // 6、实现 Rectangle 类中的 calculateArea 方法，计算矩形的面积并返回结果。
  calculateArea(): number {
    return this.width * this.height
  }
}


// 7、创建一个名为 Circle 的类，它继承自 Shape 类。
export class Circle extends Shape {
  name = '圆'
  // 8、Circle 类有一个属性 radius，它是一个数字类型。
  radius: number
  constructor(radius: number) {
    super()
    this.radius = radius
  }
  // 9、实现 Circle 类中的 calculateArea 方法，计算圆的面积并返回结果。
  calculateArea() {
    return this.radius * this.radius * Math.PI
  }
}



// 10、创建一个名为 ShapeFactory 的类，它有一个静态方法 createShape，根据传入的参数 type 创建不同的图形对象。

class ShapeFactory {
  static createShape(type: "Rectangle" | "Circle", params1: number, params2?: number) {
  // 11、如果传入的 type 为 Rectangle，则调用 Rectangle 类的构造函数创建一个矩形对象，并返回该对象。
  // 12、如果传入的 type 为 Circle，则调用 Circle 类的构造函数创建一个圆对象，并返回该对象。
    if(type === "Rectangle") {
      if(params2 !== undefined)
        return new Rectangle(params1, params2)
    } else {
      return new Circle(params1)
    }
  }
}

// 13、创建一个名为 shape1 的变量，使用 ShapeFactory.createShape 方法创建一个矩形对象，宽度为 5，高度为 10。
// 14、创建一个名为 shape2 的变量，使用 ShapeFactory.createShape 方法创建一个圆对象，半径为 7。
const shape1 = ShapeFactory.createShape('Rectangle', 5, 10)
const shape2 = ShapeFactory.createShape('Circle', 7)


// 15、调用 shape1 的 calculateArea 方法，确保输出矩形的面积。
// 16、调用 shape2 的 calculateArea 方法，确保输出圆的面积
console.log(shape1?.calculateArea())
console.log(shape2?.calculateArea())

// 17、100% 还原页面，正确实现描述需求，无bug
// 18正确录制效果视频，实现功能标黄
